package com.qhhc.mapper;

import com.qhhc.entity.CustomerServiceSession;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 客服会话Mapper接口
 */
@Mapper
public interface CustomerServiceSessionMapper {
    /**
     * 创建会话
     * 
     * @param session 会话信息
     * @return 结果
     */
    int insertSession(CustomerServiceSession session);
    
    /**
     * 根据会话ID查询会话
     * 
     * @param sessionId 会话ID
     * @return 会话信息
     */
    CustomerServiceSession selectSessionBySessionId(String sessionId);
    
    /**
     * 查询用户的会话列表
     * 
     * @param userId 用户ID
     * @return 会话列表
     */
    List<CustomerServiceSession> selectSessionsByUserId(Long userId);
    
    /**
     * 查询访客的会话列表
     * 
     * @param visitorId 访客ID
     * @return 会话列表
     */
    List<CustomerServiceSession> selectSessionsByVisitorId(String visitorId);
    
    /**
     * 查询客服的会话列表
     * 
     * @param serviceId 客服ID
     * @return 会话列表
     */
    List<CustomerServiceSession> selectSessionsByServiceId(Long serviceId);
    
    /**
     * 更新会话状态
     * 
     * @param sessionId 会话ID
     * @param status 状态
     * @return 结果
     */
    int updateSessionStatus(@Param("sessionId") String sessionId, @Param("status") Integer status);
    
    /**
     * 更新会话评价
     * 
     * @param sessionId 会话ID
     * @param score 评分
     * @param content 评价内容
     * @return 结果
     */
    int updateSessionEvaluation(@Param("sessionId") String sessionId, @Param("score") Integer score, @Param("content") String content);
    
    /**
     * 更新会话的最后一条消息
     * 
     * @param sessionId 会话ID
     * @param lastMessage 最后一条消息
     * @return 结果
     */
    int updateSessionLastMessage(@Param("sessionId") String sessionId, @Param("lastMessage") String lastMessage);
    
    /**
     * 分页查询会话列表
     * 
     * @param params 查询参数
     * @return 会话列表
     */
    List<CustomerServiceSession> selectSessionList(Map<String, Object> params);
    
    /**
     * 查询会话数量
     * 
     * @param params 查询参数
     * @return 会话数量
     */
    int selectSessionCount(Map<String, Object> params);
} 